package com.xhj.mybatis.plugin;

import java.lang.annotation.*;

/**
 * Intercepts
 *
 * @author XJks
 * @description 该注解用于指定要拦截的目标方法。
 *
 * <p>
 * TODO:
 *  <b>如何使用：</b>
 *  <pre>
 *  &#064;Intercepts({&#064;Signature(
 *      type= Executor.class, // 指定要拦截的类类型
 *      method = "update", // 指定要拦截的方法名
 *      args = {MappedStatement.class ,Object.class})}) // 指定方法参数类型
 *  public class ExamplePlugin implements Interceptor { // 插件类需实现Interceptor接口
 *      &#064;Override
 *      public Object intercept(Invocation invocation) throws Throwable { // 拦截逻辑实现
 *      // 可在方法执行前做预处理
 *      Object returnObject = invocation.proceed(); // 执行原方法
 *      // 可在方法执行后做后处理
 *      return returnObject; // 返回结果
 *      }
 *  }
 *  </pre>
 */
@Documented // 表示该注解会包含在Javadoc中
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可用
@Target(ElementType.TYPE) // 注解只能用于类、接口（类型）上
public @interface Intercepts { // 定义一个名为Intercepts的注解
    /**
     * 返回要拦截的方法签名数组。
     *
     * @return 方法签名数组
     */
    Signature[] value(); // 注解的属性，指定要拦截的方法签名
}
